package com.magic.java8.methodref;

import org.junit.Test;

import java.util.function.Function;

/**
 * @author laoma
 * @create 2021-05-30 11:39
 */

// 简单说，方法引用就是一个 Lambda 表达式，操作符就是 ::，有的小伙伴们可能会觉得所谓的 Lambda 就是 -> 代替匿名内部类，
// 其实不然！Lambda 中包含的东西还是蛮多的，方法引用就算是其中之一。
// 有的时候，我们使用 Lambda，需要自己写方法的实现，但是有的时候，我们可能不需要自己写方法的实现，就是单纯的调用一下方法，
// 这种时候，通过方法名称来调用，会更加清晰，可读性更高，也更加简洁易懂。
// 方法引用不仅可以用来访问类或者实例中已经存在的方法，也可以用来访问构造方法。
public class TestMethod2 {
    @Test
    public void test1(){
        Function<Integer, String> func = new Function<Integer, String>() {
            @Override
            public String apply(Integer integer) {
                return String.valueOf(integer);
            }
        };
        String apply = func.apply(1);
        System.out.println("apply = " + apply);
    }

    @Test
    public void test2() {
        Function<Integer,String> func = a -> String.valueOf(a);
        String apply = func.apply(2);
        System.out.println("apply = " + apply);
    }

    @Test
    public void test3() {
        Function<Integer,String> func = String::valueOf;
        String apply = func.apply(3);
        System.out.println("apply = " + apply);
    }
}
